package org.open2jam.render; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.logging.Level; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import org.open2jam.util.Logger; import org.xml.sax.ErrorHandler; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class SkinChecker { String schemaLocation = "/resources/skin_schema.xsd"; class SimpleErrorHandler implements ErrorHandler { @Override public void warning(SAXParseException exception) throws SAXException { Logger.global.log(Level.WARNING, "Warning [line:{2} column:{1}] : {0}", new Object[]{exception.getMessage(), exception.getColumnNumber(), exception.getLineNumber()}); } @Override public void error(SAXParseException exception) throws SAXException { Logger.global.log(Level.SEVERE, "Error [line:{2} column:{1}] : {0}", new Object[]{exception.getMessage(), exception.getColumnNumber(), exception.getLineNumber()}); } @Override public void fatalError(SAXParseException exception) throws SAXException { Logger.global.log(Level.SEVERE, "FatalError [line:{2} column:{1}] : {0}", new Object[]{exception.getMessage(), exception.getColumnNumber(), exception.getLineNumber()}); throw exception; } } public boolean validate(String xmlFile) throws SAXException, IOException { InputStream input_stream = null; URL url = SkinChecker.class.getResource(xmlFile); if(url == null) { File file = new File(xmlFile); if(!file.exists()) { Logger.global.log(Level.SEVERE, "There is no xml file {0}", xmlFile); return false; } input_stream = new FileInputStream(file); } else { input_stream = url.openStream(); } if(input_stream == null) Logger.global.log(Level.SEVERE, "There is no xml file {0}", xmlFile); SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); URL schema_file = SkinChecker.class.getResource(schemaLocation); Schema schema = factory.newSchema(schema_file); Validator validator = schema.newValidator(); Source source = new StreamSource(input_stream); ErrorHandler error_handler = new SimpleErrorHandler(); validator.setErrorHandler(error_handler); try { validator.validate(source); return true; //it's valid. } catch (SAXException ex) { return false; } } }